#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/6/27 17:42
# @USER    : Shengji He
# @File    : SimplifyPath.py
# @Software: PyCharm
# @Version  : Python-
# @TASK:

class Solution:
    def simplifyPath(self, path: str) -> str:
        """
        Given an absolute path for a file (Unix-style), simplify it. Or in other words, convert it to the
        canonical path.

        In a UNIX-style file system, a period . refers to the current directory. Furthermore, a double period .. moves
        the directory up a level.

        Note that the returned canonical path must always begin with a slash /, and there must be only a single
        slash / between two directory names. The last directory name (if it exists) must not end with
        a trailing /. Also, the canonical path must be the shortest string representing the absolute path.

        Example 1:
            Input: "/home/"

            Output: "/home"

            Explanation: Note that there is no trailing slash after the last directory name.
        Example 2:
            Input: "/../"

            Output: "/"

            Explanation: Going one level up from the root directory is a no-op, as the root level is
            the highest level you can go.
        Example 3:
            Input: "/home//foo/"

            Output: "/home/foo"

            Explanation: In the canonical path, multiple consecutive slashes are replaced by a single one.
        Example 4:
            Input: "/a/./b/../../c/"

            Output: "/c"
        Example 5:
            Input: "/a/../../b/../c//.//"

            Output: "/c"
        Example 6:
            Input: "/a//b////c/d//././/.."

            Output: "/a/b/c"

        :param path:
        :return:
        """
        while '//' in path:
            path = path.replace('//', '/')
        # if not path:
        #     return '/'
        names = []
        for p in path.split('/'):
            if p == '..':
                if not names:
                    pass
                else:
                    names.pop()
            elif p == '.':
                pass
            else:
                names.append(p)
        ans = '/' + '/'.join(names) + '/'
        while '//' in ans:
            ans = ans.replace('//', '/')
        if len(ans) > 1:
            ans = ans[: -1]
        return ans


if __name__ == '__main__':
    S = Solution()
    path = "/a//b////c/d//././/.."
    # path = "/a/../../b/../c//.//"
    # path = "/a/./b/../../c/"
    # path = "/home//foo/"
    # path = "/../"
    # path = "/home/"
    print(S.simplifyPath(path))
    # print('done')
